class Solution {
    // 模拟+双指针
    public String countAndSay(int n) {
        // 初始字符串为"1"
        String ret = "1";
        
        // 迭代 n-1 次，生成第 n 次报数
        for (int i = 1; i < n; i++) {
            int len = ret.length();  // 当前字符串长度
            StringBuilder tmp = new StringBuilder();

            // left：指向当前连续字符段的起点
            // right：向后寻找与 left 所指字符相同的字符
            for (int left = 0, right = 0; right < len;) {
                // 找到连续相同字符的结束位置
                while (right < len && ret.charAt(left) == ret.charAt(right)) {
                    right++;
                }
                tmp.append(right - left);  // 连续字符的数量
                tmp.append(ret.charAt(left));  // 连续字符
                
                // 将 left 移动到下一个连续字符段的起始位置
                left = right;
            }
            ret = tmp.toString();
        }
        return ret;
    }
}